﻿#ifndef TABWIDGET_H
#define TABWIDGET_H

#include <QTabWidget>
#include <QPainter>
#include <QStyleOptionTab>
#include <QStylePainter>
#include <QMouseEvent>
#include <QLinearGradient>
#include <QColor>
#include <QDrag>
#include <QMimeData>
#include <QApplication>
#include <QIcon>

// 自定义TabBar类
class TabBar : public QTabBar
{
    Q_OBJECT

public:
    explicit TabBar(QWidget *parent = nullptr);

    // 设置圆角
    void setCornerRadius(int radius);

    // 设置背景颜色
    void setBackgroundColor(const QColor &color);

    // 设置字体颜色
    void setTextColor(const QColor &color);

    // 设置关闭按钮颜色
    void setCloseButtonColor(const QColor &color);

    // 设置是否显示关闭按钮
    void setCloseButtonVisible(bool visible);

protected:
    // 重写绘制事件
    void paintEvent(QPaintEvent *event) override;

    // 重写Tab的大小计算
    QSize tabSizeHint(int index) const override;

    // 重写鼠标按下事件
    void mousePressEvent(QMouseEvent *event) override;

    // 重写鼠标移动事件
    void mouseMoveEvent(QMouseEvent *event) override;

    // 重写鼠标离开事件
    void leaveEvent(QEvent *event) override;

private:
    int cornerRadius; // 圆角半径
    QColor backgroundColor; // 背景颜色
    QColor textColor; // 字体颜色
    QColor closeButtonColor; // 关闭按钮颜色
    int hoveredCloseButtonIndex; // 鼠标滑过的关闭按钮索引
    int pressedCloseButtonIndex; // 鼠标点击的关闭按钮索引
    bool closeButtonVisible; // 是否显示关闭按钮

    // 绘制关闭按钮
    void drawCloseButton(QPainter *painter, const QRect &rect, bool hovered, bool pressed);
};

// 自定义TabWidget类
class TabWidget : public QTabWidget
{
    Q_OBJECT

public:
    explicit TabWidget(QWidget *parent = nullptr);

    // 设置圆角
    void setTabCornerRadius(int radius);

    // 设置背景颜色
    void setBackgroundColor(const QColor &color);

    // 设置字体颜色
    void setTextColor(const QColor &color);

    // 设置关闭按钮颜色
    void setCloseButtonColor(const QColor &color);

    // 设置是否显示关闭按钮
    void setCloseButtonVisible(bool visible);
};

#endif // TABWIDGET_H
